--------------------- 脚本出错，看看是不是没有把优惠券缓存提前加载到redis-----------------
-- 优惠券id
local voucherId = ARGV[2]
-- 用户id
local userId = ARGV[4]
-- 订单id
local orderId = KEYS[1]
-- 库存key 秒杀券库存前缀 + id
local skVoucher_stockKey = ARGV[1] .. voucherId
-- 优惠券id为key存储用户id的集合
local voucherKey_with_userIdSet = ARGV[3] .. voucherId
-- 当前时间字符串
local now_time = ARGV[5]
-- 判断活动是否开始
if (now_time < redis.call('hget', skVoucher_stockKey, 'beginTime')) then
    -- 活动没开始返回1
    return 1
end
-- 判断活动是否结束
if (now_time > redis.call('hget', skVoucher_stockKey, 'endTime')) then
    -- 活动结束了返回2
    return 2
end
-- 判断库存是否充足
if (tonumber(redis.call('hget', skVoucher_stockKey, 'stock')) <= 0) then
    -- 库存不足,返回3
    return 3
end
-- 判断用户是否下单
if (redis.call('sismember', voucherKey_with_userIdSet, userId) == 1) then
    -- 订单已经存在，返回4
    return 4
end
-- 前面没有return，可以扣减库存和下单
redis.call('hincrby', skVoucher_stockKey, 'stock', -1)
redis.call('sadd', voucherKey_with_userIdSet, userId)
-- 发消息到队列中，XADD stream.order * k1 v1 k2 v2 ...
redis.call("xadd", 'stream.order', '*', "userId", userId, 'voucherId', voucherId, 'id', orderId)
return 0